//程序调试
// console.log(1);
// let a = 100;
// console.log(a);
// function fn1() {
//     let b = 200;
//     console.log(2);
//     function fn2() {
//         let c = 300;
//         console.log(3);
//     }
//     fn2();
//     console.log(4);
// }
// fn1();  //当函数执行完毕，或者执行到return语句，就会返回到调用函数的地方，继续执行后面的代码
// console.log(5);

// /* 函数调用栈
// *   fn2
// *   fn1
// *   全局
// * */


// let a = 100;
// function abc(){
//     let b = 200;
//     function test(){
//         let c = 300;
//         for (let i = 0; i < 3; i++) {
//             let d = 400;
//             console.log(i, d, c, b, a);
//         }
//     }
//     test();
// }
// {
//     let f = 600;
//     function abd() {
//         let e = 500;
//         console.log(a, e, f);
//     }
//     abd();
// }
// abc();
// console.log(a);
//
// // for语句块 --> test函数块 --> abc函数块 --> 全局
// //abd函数块 --> 局部代码块 --> 全局
//


// var a = 100;
// function test(){
//     console.log(a);     //100
//     a = 200;
//     console.log(a);     //200
// }
// test();
// console.log(a);         //200


// var a = 100;
// function test(){
//     console.log(a);     //undefined 在test()函数中没有声明a变量
//     var a = 200;
//     console.log(a);     //200
// }
// test();
// console.log(a);         //100


// var a = 100;
// function test(a){
//     console.log(a);     //undefined 没有传参 默认为undefined
//     a = 200;
//     console.log(a);     //200 这里的a只与函数的代码块有关
// }
// test();
// console.log(a);         //100 全局 没有改变


// var a = 100;
// var b = 300;
// function test(){
//     b = 400;
//     console.log(a);     //undefined
//     var a = 200;
//     console.log(a);     //200
// }
// console.log(a, b);      // 100, 300
// test();


// console.log(a);         //function a
// var a = 100;
// function a(){  //函数声明提前
//     console.log(200);
// }
// console.log(a);         //100
// var a = function(a){
//     return a;
// }
// console.log(a());       //undefined
// var a;
// console.log(a);         //function a


//匿名函数如果不赋值给变量，也不作为返回值或者参数传入，则必须在声明时直接调用，且只能调用一次
//一般写JS代码给别人使用时，会封装在一个匿名自执行函数内，且在开始处会加分号
// var a = 100;
//
// ;(function () {   //function前面加一个分号; 是为了防止报错
//     var a = 100;
//     var b = 200;
//     console.log(a, b);
// })();
//
//
;(function () {
    var a = 100;
    var b = 200;
    console.log(a, b);
}());


// !function () {
//     var a = 100;
//     var b = 200;
//     console.log(a, b);
// }();


// {
//     let a = 100;
//     let b = 200;
//     console.log(a, b);
// }


// var a = function (a, b) {
//     console.log(a + b);
// }
// a(100, 200);



// (function (a, b) {
//     console.log(a + b);
// }(100, 200));










